<?php
#图片裁剪类
class Thumb{
    public function __construct()
    {

    }


    #开放的接口
    public function make(string $image,string $to,int $width,int $height,int $type=1){
        #判断图片是不是正常
        $this->fileCheck($image);
        #原图片
        $dstImage = $this->resource($image);
        #计算图片和画布的尺寸
        $info = $this->size($width,$height,imagesx($dstImage),imagesy($dstImage),$type);
        #创建目标图片
        $resImage = imagecreatetruecolor($info[0],$info[1]);
        //进行缩略
        imagecopyresampled($resImage,$dstImage,0,0,0,0,$info[0],$info[1],$info[2],$info[3]);

        #保存图片
         $this->saveActive($image)($resImage,$to??$image);
//        header('Content-Type:image/png');
//        imagepng($resImage);
    }


    #计算图片和画布的尺寸
    /*
     * $rw 目标图像的宽度
     * $rh 目标图像的高度
     * $iw 原图像的宽度
     * $ih 原图像的高度
     * */
    protected function size($rw,$rh,$iw,$ih,$type){
        switch ($type){
            case 1:
                //宽度固定，高度自动
                $rh = $rw / $iw * $ih;
                break;
            case 2:
                //高度固定,宽度自动
                $rw = $rh / $ih * $iw;
                break;
            case 3:
                //固定高度,宽度裁切
                $ih = $iw/$rw * $rh;
                break;
            default:
                if($iw/$rw > $ih/$rh){
                    $iw = $ih/$rh * $rw;
                }else{
                    $ih = $iw / $rw * $rh;
                }
        }

        return [$rw,$rh,$iw,$ih];
    }

    #文件检查
    protected function fileCheck(string $image){
        if(!is_file($image) || getimagesize($image) === false){
            throw new Exception('file is not found or not is a resource');
        }
    }

    #加载图片资源
    protected function resource($image){
        $info = getimagesize($image);
        $loadArr = [1=>'imagecreatefromgif',2=>'imagecreatefromjpeg',3=>'imagecreatefrompng'];
        return $loadArr[$info[2]]($image);
    }


    #保存图片
    protected function saveActive(string $image){
        $info = getimagesize($image);
        $printArr = [1=>'imagegif',2=>'imagejpeg',3=>'imagepng'];
        return $printArr[$info[2]];
    }






}